﻿package atm.connection;



import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Calendar;


import atm.Atm;
import atm.Data;
import atm.Money;
import atm.Recharge;


import atm.routing.AtmData;


public class Connect {

	int atmBeginningState = 2000;
    Connection c = null;
  
    
    public void getConnected() {
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            //c = DriverManager.getConnection("jdbc:mysql://localhost:3306/eskabud_bankomat", "root", "");
            c = DriverManager.getConnection("jdbc:mysql://eskabud.kylos.pl/eskabud_bankomat", "eskabud_bankomat", "bankomat");
          //  c = DriverManager.getConnection("jdbc:mysql://lubiefrytki.pl:3308/BANKOMATY", "paiglobalpl", "pass123");
            System.out.println("Połączono");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            System.out.println("Błąd połączenia");
            //  e.printStackTrace();
        } catch (Exception e) {
            System.out.println("Błąd bazy");
        }
    }


    public ArrayList<String> getAtmsInfo() {
        ArrayList<String> atms = new ArrayList<String>();
        try {
            Statement st = c.createStatement();
            ResultSet rs = st.executeQuery("SELECT `miasto` , `ulica` , `numer` FROM `bankomaty`");
            while (rs.next()) {
                atms.add(rs.getString("miasto") + ", " + rs.getString("ulica") + ", " + rs.getString("numer"));
            }
            rs.close();
        } catch (Exception e) {
            System.out.println("B��d przy pobieraniu danych...");
        }
        return atms;
    }

    public ArrayList<Integer> getCashAmount10(int i) {
        ArrayList<Integer> amount = new ArrayList<Integer>();
        try {
            Statement st = c.createStatement();
            ResultSet rs = st.executeQuery("SELECT ifnull( sum( w10 ) , 0 ) as suma FROM wyplaty WHERE week( data ) = week ( curdate()) -1 AND id_bankomat =" + i + " GROUP BY data ORDER BY weekday( data )");
            while (rs.next()) {
                amount.add(rs.getInt("suma"));
            }
            rs.close();
        } catch (Exception e) {
            System.out.println("B��d przy pobieraniu danych...");
        }
        return amount;
    }

    public ArrayList<Integer> getCashAmount20(int i) {
        ArrayList<Integer> amount = new ArrayList<Integer>();
        try {
            Statement st = c.createStatement();
            ResultSet rs = st.executeQuery("SELECT ifnull( sum( w20 ), 0 ) as suma FROM wyplaty WHERE week( data ) = week ( curdate()) -1 AND id_bankomat =" + i + " GROUP BY data ORDER BY weekday( data )");
            while (rs.next()) {
                amount.add(rs.getInt("suma"));
            }
            rs.close();
        } catch (Exception e) {
            System.out.println("B��d przy pobieraniu danych...");
        }
        return amount;
    }

    public ArrayList<Integer> getCashAmount50(int i) {
        ArrayList<Integer> amount = new ArrayList<Integer>();
        int j = 1;
        try {
            Statement st = c.createStatement();
            ResultSet rs = st.executeQuery("SELECT ifnull( sum( w50 ) , 0) as suma FROM wyplaty WHERE week( data ) = week ( curdate()) -1 AND id_bankomat =" + i + " GROUP BY data ORDER BY weekday( data )");
            while (rs.next()) {
                amount.add(rs.getInt("suma"));
            }
            rs.close();
        } catch (Exception e) {
            System.out.println("B��d przy pobieraniu danych...");
        }
        return amount;
    }

    public ArrayList<Integer> getCashAmount100(int i) {
        ArrayList<Integer> amount = new ArrayList<Integer>();
        try {
            Statement st = c.createStatement();
            ResultSet rs = st.executeQuery("SELECT ifnull( sum( w100 ) , 0 ) as suma FROM wyplaty WHERE week( data ) = week ( curdate()) -1 AND id_bankomat =" + i + " GROUP BY data ORDER BY weekday( data )");
            while (rs.next()) {
                amount.add(rs.getInt("suma"));
            }
            rs.close();
        } catch (Exception e) {
            System.out.println("B��d przy pobieraniu danych...");
        }
        return amount;
    }
    
    public ArrayList<Atm> getNextScheduleDays(){
    	ArrayList<Atm> addAtmToScheduleday = new ArrayList<Atm>();
        try {
            Statement st = c.createStatement();
            ResultSet rs = st.executeQuery("SELECT 2000 - sum(w.w10) as w10, 2000 - sum(w.w20) as w20, 2000 - sum(w.w50) as w50, 2000 - sum(w.w100) as w100, b.id_bankomat as idbank, data_uzupelnienia as datau, data_nastepnego as datan, "
            		+ "b.miasto as miasto, b.ulica as ulica, b.numer as numer from bankomaty b, wyplaty w where w.data >= b.data_uzupelnienia AND b.id_bankomat=w.id_bankomat group by"
            		+ " b.id_bankomat");
            while (rs.next()) {
            	addAtmToScheduleday.add(new Atm(rs.getInt("idbank"), rs.getInt("w10"), rs.getInt("w20"), rs.getInt("w50"), rs.getInt("w100"), rs.getDate("datau"), rs.getString("miasto"), rs.getString("ulica"), rs.getString("numer"), rs.getDate("datan")));
            }
            rs.close();
        } catch (Exception e) {
            System.out.println("B��d przy pobieraniu danych...");
        }
        return addAtmToScheduleday;
    }
    
    public int actualState10(int i){
    	int state = 0;
    	try {
            Statement st = c.createStatement();
            ResultSet rs = st.executeQuery("SELECT 2000 - sum( w.w10 ) as suma FROM bankomaty b, wyplaty w WHERE w.id_bankomat = b.id_bankomat AND b.`data_uzupelnienia` <= w.data AND w.id_bankomat = " + i + "  GROUP BY w.id_bankomat");
            while (rs.next()) {
                state = rs.getInt("suma");
            }
            rs.close();
        } catch (Exception e) {
            System.out.println("B��d przy pobieraniu danych...");
        }
        return state;
    }

    public int actualState20(int i){
    	int state = 0;
    	try {
            Statement st = c.createStatement();
            ResultSet rs = st.executeQuery("SELECT 2000 - sum( w.w20 ) as suma FROM bankomaty b, wyplaty w WHERE w.id_bankomat = b.id_bankomat AND b.`data_uzupelnienia` <= w.data AND w.id_bankomat = " + i);
            while (rs.next()) {
                state = rs.getInt("suma");
            }
            rs.close();
        } catch (Exception e) {
            System.out.println("B��d przy pobieraniu danych...");
        }
        return state;
    }
    public int actualState50(int i){
    	int state = 0;
    	try {
            Statement st = c.createStatement();
            ResultSet rs = st.executeQuery("SELECT 2000 - sum( w.w50 ) as suma FROM bankomaty b, wyplaty w WHERE w.id_bankomat = b.id_bankomat AND b.`data_uzupelnienia` <= w.data AND w.id_bankomat = " + i);
            while (rs.next()) {
                state = rs.getInt("suma");
            }
            rs.close();
        } catch (Exception e) {
            System.out.println("B��d przy pobieraniu danych...");
        }
        return state;
    }
    public int actualState100(int i){
    	int state = 0;
    	try {
            Statement st = c.createStatement();
            ResultSet rs = st.executeQuery("SELECT 2000 - sum( w.w100 ) as suma FROM bankomaty b, wyplaty w WHERE w.id_bankomat = b.id_bankomat AND b.`data_uzupelnienia` <= w.data AND w.id_bankomat = " + i);
            while (rs.next()) {
                state = rs.getInt("suma");
            }
            rs.close();
        } catch (Exception e) {
            System.out.println("B��d przy pobieraniu danych...");
        }
        return state;
    }
    
    public ArrayList<Atm> getAtms(int dni){
    	 ArrayList<Atm> lista_bankomatow = new ArrayList<Atm>();
    	 Atm bankomat= new Atm();
    	 try{
    	 Statement st = c.createStatement();
    	 Statement st1 = c.createStatement();
    	 Statement st2 = c.createStatement();
    	 Statement st3 = c.createStatement();
    	 Statement st4 = c.createStatement();
    	 Statement st5 = c.createStatement();
         ResultSet rs = st.executeQuery("SELECT *  FROM bankomaty ");
        
        
         while (rs.next()) {
        	 bankomat.setId_bankomat(rs.getInt("id_bankomat"));
        	 bankomat.setLiczba_100(rs.getInt("stan100"));
        	bankomat.setLiczba_50(rs.getInt("stan50"));
        	bankomat.setLiczba_20(rs.getInt("stan20"));
        	bankomat.setLiczba_10(rs.getInt("stan10"));
        	bankomat.setOstatnie_doladowanie(rs.getDate("data_uzupelnienia"));
        	 lista_bankomatow.add(bankomat);
        	 bankomat= new Atm();
         }
     /*  ResultSet rsstan = st.executeQuery(" SELECT * FROM bankomaty WHERE id_bankomat="+bankomat.getId_bankomat()+"");
         ResultSet rsstan50 = st.executeQuery(" SELECT stan50 FROM bankomaty WHERE  id_bankomat="+bankomat.getId_bankomat()+"");
         ResultSet rsstan20 = st.executeQuery(" SELECT stan20 FROM bankomaty WHERE  id_bankomat="+bankomat.getId_bankomat()+"");
         ResultSet rsstan10 = st.executeQuery(" SELECT stan10 FROM bankomaty WHERE  id_bankomat="+bankomat.getId_bankomat()+"");
         while(rsstan.next()){
        	 bankomat.setId_bankomat(rs.getInt("id_bankomat")); 
        	 
        	 
         }
         */
         for (int i = 0; i < lista_bankomatow.size(); i++) {
        	 
        	  ResultSet rs100 = st1.executeQuery(" SELECT sum(w100) FROM wyplaty WHERE DATE_SUB(CURDATE(),INTERVAL "+dni+" DAY)<=data and id_bankomat="+lista_bankomatow.get(i).getId_bankomat()+"");
              ResultSet rs50 = st2.executeQuery("SELECT sum(w50) FROM wyplaty WHERE DATE_SUB(CURDATE(),INTERVAL "+dni+" DAY)<=data and id_bankomat="+lista_bankomatow.get(i).getId_bankomat()+" ");
              ResultSet rs20 = st3.executeQuery("SELECT sum(w20) FROM wyplaty WHERE DATE_SUB(CURDATE(),INTERVAL "+dni+" DAY)<=data and id_bankomat="+lista_bankomatow.get(i).getId_bankomat()+"");
              ResultSet rs10 = st4.executeQuery("SELECT sum(w10) FROM wyplaty WHERE DATE_SUB(CURDATE(),INTERVAL "+dni+" DAY)<=data and id_bankomat="+lista_bankomatow.get(i).getId_bankomat()+" ");
         	 while(rs100.next()){
         	
         		lista_bankomatow.get(i).setLiczba_100(lista_bankomatow.get(i).getLiczba_100()-rs100.getInt(1));
         	 }
      while(rs50.next()){
         		 
    	  lista_bankomatow.get(i).setLiczba_50((lista_bankomatow.get(i).getLiczba_50()-rs50.getInt(1)));
         	 }
      while(rs20.next()){
     	 
    	  lista_bankomatow.get(i).setLiczba_20((lista_bankomatow.get(i).getLiczba_20()-rs20.getInt(1)));
      }
      while(rs10.next()){
     	 
    	  lista_bankomatow.get(i).setLiczba_10((lista_bankomatow.get(i).getLiczba_10()-rs10.getInt(1)));
      }
		}
       
         rs.close();
       
     } catch (Exception e) {
         System.out.println("B��d przy pobieraniu danych...1");
     }
    	return lista_bankomatow;
    	
    	
   
    	
    }
    
    
    public ArrayList<Recharge> prediction() throws SQLException{
    	 ArrayList<Atm> lista_bankomatow = new ArrayList<Atm>();
    	 lista_bankomatow= getAtms(60);
    	 Atm bankomat= new Atm();
    	 Money kasa= new Money();
    	 int ilosc=0;
    	 Date data_pierwsza;
    	 Date data_ostatnia;
    	 int licznik=0;
    	 int licznik50=0;
    	 int l=1;
    	 int licznik_roznica100=1;
    			int roznica_min100=100;
    	 int licznik_roznica50=1;
    			int roznica_min50=100;
    	 boolean pierwsza=true;
    	 boolean pierwsza50=true;

     	for (int i = 0; i < lista_bankomatow.size(); i++) {
 			System.out.println(lista_bankomatow.get(i).getId_bankomat());
 		}
    	ArrayList<Data> d = new ArrayList<Data>();
    	ArrayList<Data> d50 = new ArrayList<Data>();
    	ArrayList<Recharge> doladowania = new ArrayList<Recharge>();
    	ArrayList<Recharge> doladowania50 = new ArrayList<Recharge>();
    	ArrayList<Recharge> doladowaniakoniec = new ArrayList<Recharge>();
    	 try{
    	 Statement st100 = c.createStatement();
    	 Statement st50 = c.createStatement();
    	 Statement st20 = c.createStatement();
    	 Statement st10 = c.createStatement();
    	
    	 for (int i = 0; i < lista_bankomatow.size(); i++) {
    		 ResultSet rs100 = st100.executeQuery("select w100,data, data_uzupelnienia  from wyplaty,bankomaty  WHERE wyplaty.id_bankomat= bankomaty.id_bankomat and wyplaty.id_bankomat="+lista_bankomatow.get(i).getId_bankomat()+" and data between bankomaty.data_uzupelnienia-21 and bankomaty.data_uzupelnienia ORDER BY data  ");
    		 ResultSet rs50 = st50.executeQuery("select w50,data, data_uzupelnienia  from wyplaty,bankomaty  WHERE wyplaty.id_bankomat= bankomaty.id_bankomat and wyplaty.id_bankomat="+lista_bankomatow.get(i).getId_bankomat()+" and data between bankomaty.data_uzupelnienia-21 and bankomaty.data_uzupelnienia ORDER BY data   ");
    		 ResultSet rs20 = st20.executeQuery("select w20,data, data_uzupelnienia  from wyplaty,bankomaty  WHERE wyplaty.id_bankomat= bankomaty.id_bankomat and wyplaty.id_bankomat="+lista_bankomatow.get(i).getId_bankomat()+" and data between bankomaty.data_uzupelnienia-21 and bankomaty.data_uzupelnienia ORDER BY data    ");
    		 ResultSet rs10 = st10.executeQuery("select w10,data, data_uzupelnienia  from wyplaty,bankomaty  WHERE wyplaty.id_bankomat= bankomaty.id_bankomat and wyplaty.id_bankomat="+lista_bankomatow.get(i).getId_bankomat()+" and data between bankomaty.data_uzupelnienia-21 and bankomaty.data_uzupelnienia ORDER BY data    ");
    		 /*
    		 ResultSet rs100 = st100.executeQuery("select w100,data  from wyplaty,bankomaty  WHERE wyplaty.id_bankomat= bankomaty.id_bankomat and wyplaty.id_bankomat="+11+" and data between bankomaty.data_uzupelnienia-60 and bankomaty.data_uzupelnienia ORDER BY data");
    		 ResultSet rs50 = st50.executeQuery("select w50,data  from wyplaty,bankomaty  WHERE wyplaty.id_bankomat= bankomaty.id_bankomat and wyplaty.id_bankomat="+11+" and data between bankomaty.data_uzupelnienia-60 and bankomaty.data_uzupelnienia ORDER BY data   ");
    		 ResultSet rs20 = st20.executeQuery("select w20,data  from wyplaty,bankomaty  WHERE wyplaty.id_bankomat= bankomaty.id_bankomat and wyplaty.id_bankomat="+11+" and data between bankomaty.data_uzupelnienia-60 and bankomaty.data_uzupelnienia ORDER BY data ");
    		 ResultSet rs10 = st10.executeQuery("select w10,data  from wyplaty,bankomaty  WHERE wyplaty.id_bankomat= bankomaty.id_bankomat and wyplaty.id_bankomat="+11+" and data between bankomaty.data_uzupelnienia-60 and bankomaty.data_uzupelnienia ORDER BY data    ");
    		*/
    		 while(rs100.next()){
    		//	System.out.println("l= "+l);
    		//	System.out.println("id_bankomat= "+lista_bankomatow.get(i).getId_bankomat());
    			 Data data = new Data();
    			 if(pierwsza){
    				 data.setPoczatek(rs100.getDate("data"));
    				 data.setId_bankomat(lista_bankomatow.get(i).getId_bankomat());
    				 data.setOstatnie_doladowanie(rs100.getDate("data_uzupelnienia"));
    			 d.add(data);
    			 }
    			 pierwsza=false;
    	       ilosc=ilosc+rs100.getInt("w100");
    	    //   System.out.println(ilosc);
    	       if(ilosc>1500){
    	    //	   System.out.println("data koniec100: "+rs100.getDate("data").getDate());
    	    	   d.get(licznik).setKoniec(rs100.getDate("data"));
    	    	   d.get(licznik).roznica();
    	    	   if(d.get(licznik).getRoznica()<=0){
    	    		   
    	    		  d.remove(licznik);
    	    		   licznik=licznik-1;
    	    	   }
    	    //	   System.out.println("data poczatek100: "+d.get(licznik).getPoczatek().getDate());
    	    //	   System.out.println("roznica100: "+d.get(licznik).getRoznica());
    	    	   licznik=licznik+1;
    	    	   pierwsza=true;
    	    	   data= new Data();
    	    	   ilosc=0;
    	    	   
    	       }
          		l++;
          	 }
    	
    		// ilosc=0;
    		// licznik=0;
    		 //pierwsza=true;
       while(rs50.next()){
    	 //  System.out.println("licznik50= "+licznik50);
    	//	System.out.println("l50= "+l);
			//System.out.println("id_bankomat50= "+lista_bankomatow.get(i).getId_bankomat());
			 Data data50 = new Data();
			 if(pierwsza50){
				 data50.setPoczatek(rs50.getDate("data"));
				 data50.setId_bankomat(lista_bankomatow.get(i).getId_bankomat());
				 data50.setOstatnie_doladowanie(rs50.getDate("data_uzupelnienia"));
			 d50.add(data50);
			 }
			 pierwsza50=false;
	       ilosc=ilosc+rs50.getInt("w50");
	      // System.out.println(ilosc);
	       if(ilosc>1500){
	    	//   System.out.println("data koniec50: "+rs50.getDate("data").getDate());
	    	   
	    	   d50.get(licznik50).setKoniec(rs50.getDate("data"));
	    	   d50.get(licznik50).roznica();
	    	 
	    	   if(d50.get(licznik50).getRoznica()<=0){
	    		   
	    		   d50.remove(licznik50);
	    		   licznik50=licznik50-1;
	    		  
	    	   }
	    	//   System.out.println("data poczatek50: "+d50.get(licznik50).getPoczatek().getDate());
	    	//   System.out.println("roznica50: "+d50.get(licznik50).getRoznica());
	    	   licznik50=licznik50+1;
	    	   pierwsza50=true;
	    	   data50= new Data();
	    	   ilosc=0;
	    	   
	       }
      		l++;
      		 
      	 }
		 ilosc=0;
		// licznik50=0;
	//	 pierwsza=true;
	
		
      
       while(rs20.next()){
    	   ilosc=ilosc+rs20.getInt("w20"); 
     	 
       }
       ilosc=0;
       while(rs10.next()){
    	   ilosc=ilosc+rs10.getInt("w10"); 
     	 
       }
       ilosc=0;
       roznica_min100=100;
       roznica_min50=100;
       licznik_roznica100=1;
       licznik_roznica50=1;
    
       for (int j = 0; j < d50.size(); j++) {
   	//   System.out.println("id_bankomat_koniec= "+d50.get(j).getId_bankomat());
		//	System.out.println("roznica_koniec50:= "+d50.get(j).getRoznica());
		}
		}
    	 }
    	 catch (Exception e) {
             System.out.println("B��d przy pobieraniu danych...2");
         }
    	
    	   for (int j = 0; j < d.size(); j++) {
        	   
        	//   System.out.println("id_bankomat_koniec= "+d.get(j).getId_bankomat());
        	//   System.out.println("roznica:= "+roznica_min100);
    		//	System.out.println("licznik:= "+licznik_roznica100);
    			if(d.get(j).getId_bankomat()==licznik_roznica100){
    		//		 System.out.println("roznica min: "+d.get(j).getRoznica()+"min: "+roznica_min100);
    			
    				if(d.get(j).getRoznica()<=roznica_min100){
    				//	 System.out.println("roznica min: "+roznica_min100);
    					roznica_min100=d.get(j).getRoznica();
    				}
    			}
    			else{
    				
    				
    			//	 System.out.println("Licznik_roznica2: "+licznik_roznica100);
    				 Recharge r = new Recharge();
     				r.setId_bankomat(licznik_roznica100);
     			//	System.out.println("Licznik_najmniejszy: "+roznica_min100+"+id"+licznik_roznica100);
     				licznik_roznica100=licznik_roznica100+1;
     				
     		//		Calendar c = Calendar.getInstance() ;
     			//	c.set(d.get(licznik_roznica100).getOstatnie_doladowanie().getYear(), d.get(licznik_roznica100).getOstatnie_doladowanie().getMonth(), d.get(licznik_roznica100).getOstatnie_doladowanie().getDate());
     				doladowania.add(r);
     				Date da = new  Date(d.get(licznik_roznica100).getOstatnie_doladowanie().getYear(), d.get(licznik_roznica100).getOstatnie_doladowanie().getMonth(), d.get(licznik_roznica100).getOstatnie_doladowanie().getDate()+roznica_min100) ;
     	    		
     				r.setData_doladowania(da);
     				r= new Recharge();
     				roznica_min100=100;
     			j--;
    			}
    		}
    	   roznica_min100=100;
    	   Statement max = c.createStatement();
      	 ResultSet rsmax = max.executeQuery("SELECT max(id_bankomat) FROM bankomaty" ) ;
while(rsmax.next()){
    	   //System.out.println("rozmiar: "+d.size());
    	   for (int j = 0; j < d.size(); j++) {
     	   if(d.get(j).getId_bankomat()== rsmax.getInt(1)){
    	   if(d.get(j).getRoznica()<=roznica_min100){
				// System.out.println("roznica min: "+roznica_min100);
				roznica_min100=d.get(j).getRoznica();
				 Recharge r = new Recharge();
  				r.setId_bankomat(licznik_roznica100);
  			//	System.out.println("Licznik_najmniejszy: "+roznica_min100+"+id"+licznik_roznica100);
  				licznik_roznica100=licznik_roznica100+1;
  				
  		//		Calendar c = Calendar.getInstance() ;
  			//	c.set(d.get(licznik_roznica100).getOstatnie_doladowanie().getYear(), d.get(licznik_roznica100).getOstatnie_doladowanie().getMonth(), d.get(licznik_roznica100).getOstatnie_doladowanie().getDate());
  				doladowania.add(r);
  				Date da = new  Date(d.get(licznik_roznica100).getOstatnie_doladowanie().getYear(), d.get(licznik_roznica100).getOstatnie_doladowanie().getMonth(), d.get(licznik_roznica100).getOstatnie_doladowanie().getDate()+roznica_min100) ;
  	    		
  				r.setData_doladowania(da);
  				r= new Recharge();
    	   }
    	   }
    	   }
    	   doladowania.remove(doladowania.size()-1);
}
   /* for (int j = 0; j < doladowania.size(); j++) {
			System.out.println("id_bankomat dolad:"+doladowania.get(j).getId_bankomat());
			System.out.println("data doladowania: "+doladowania.get(j).getData_doladowania());
    }
    */	/////////////////////////////////////////////////////////////////
	   for (int j = 0; j < d50.size(); j++) {
    	   
    	//  System.out.println("id_bankomat_koniec= "+d50.get(j).getId_bankomat());
    	 //  System.out.println("roznica:= "+roznica_min50);
			//System.out.println("licznik:= "+licznik_roznica50);
			if(d50.get(j).getId_bankomat()==licznik_roznica50){
			//	 System.out.println("roznica min: "+d50.get(j).getRoznica()+"min: "+roznica_min50);
			
				if(d50.get(j).getRoznica()<=roznica_min50){
				//	 System.out.println("roznica min: "+roznica_min50);
					roznica_min50=d50.get(j).getRoznica();
				}
			}
			else{
				
				
			//	 System.out.println("Licznik_roznica2: "+licznik_roznica50);
				 Recharge r = new Recharge();
 				r.setId_bankomat(licznik_roznica50);
 			//	System.out.println("Licznik_najmniejszy: "+roznica_min50+"+id"+licznik_roznica50);
 				licznik_roznica50=licznik_roznica50+1;
 				
 		//		Calendar c = Calendar.getInstance() ;
 			//	c.set(d.get(licznik_roznica100).getOstatnie_doladowanie().getYear(), d.get(licznik_roznica100).getOstatnie_doladowanie().getMonth(), d.get(licznik_roznica100).getOstatnie_doladowanie().getDate());
 				doladowania50.add(r);
 				Date da = new  Date(d50.get(licznik_roznica50).getOstatnie_doladowanie().getYear(), d50.get(licznik_roznica50).getOstatnie_doladowanie().getMonth(), d50.get(licznik_roznica50).getOstatnie_doladowanie().getDate()+roznica_min50) ;
 	    		
 				r.setData_doladowania(da);
 				r= new Recharge();
 				roznica_min50=50;
 			j--;
			}
		}
	   roznica_min50=50;
	   Statement max50 = c.createStatement();
  	 ResultSet rsmax50 = max.executeQuery("SELECT max(id_bankomat) FROM bankomaty" ) ;
while(rsmax50.next()){
	   //System.out.println("rozmiar: "+d.size());
	   for (int j = 0; j < d50.size(); j++) {
 	   if(d50.get(j).getId_bankomat()== rsmax50.getInt(1)){
	   if(d50.get(j).getRoznica()<=roznica_min50){
			// System.out.println("roznica min: "+roznica_min100);
			roznica_min50=d50.get(j).getRoznica();
			 Recharge r = new Recharge();
				r.setId_bankomat(licznik_roznica50);
				//System.out.println("Licznik_najmniejszy: "+roznica_min50+"+id"+licznik_roznica50);
				licznik_roznica50=licznik_roznica100+1;
				
		//		Calendar c = Calendar.getInstance() ;
			//	c.set(d.get(licznik_roznica100).getOstatnie_doladowanie().getYear(), d.get(licznik_roznica100).getOstatnie_doladowanie().getMonth(), d.get(licznik_roznica100).getOstatnie_doladowanie().getDate());
				
				Date da = new  Date(d50.get(licznik_roznica50).getOstatnie_doladowanie().getYear(), d.get(licznik_roznica50).getOstatnie_doladowanie().getMonth(), d.get(licznik_roznica50).getOstatnie_doladowanie().getDate()+roznica_min50) ;
	    		
				r.setData_doladowania(da);
				doladowania50.add(r);
				r= new Recharge();
	   }
	   }
	   }
	   doladowania50.remove(doladowania50.size()-1);
	   doladowania50.remove(doladowania50.size()-1);
}
for (int j = 0; j < doladowania50.size(); j++) {
	//	System.out.println("id_bankomat dolad:"+doladowania50.get(j).getId_bankomat());
	//	System.out.println("data doladowania: "+doladowania50.get(j).getData_doladowania());
}

for (int i = 0; i < doladowania.size(); i++) {
	for (int j = 0; j < doladowania50.size(); j++) {
		Recharge dol = new Recharge();
		if(doladowania.get(i).getId_bankomat()==doladowania50.get(j).getId_bankomat()){
			if(doladowania.get(i).getData_doladowania().compareTo(doladowania50.get(j).getData_doladowania())<0){
				dol.setData_doladowania(doladowania.get(i).getData_doladowania());
				dol.setId_bankomat(doladowania.get(i).getId_bankomat());
			}
			else{
				dol.setData_doladowania(doladowania50.get(j).getData_doladowania());
				dol.setId_bankomat(doladowania.get(i).getId_bankomat());
			}
			doladowaniakoniec.add(dol);
			dol= new Recharge();
		}
	}
	
}
for (int i = 0; i < doladowaniakoniec.size(); i++) {
	 Statement uzupelnij = c.createStatement();
	 PreparedStatement stpre = c.prepareStatement("update bankomaty set data_nastepnego = (?) WHERE id_bankomat = (?)");
     stpre.setDate(1,doladowaniakoniec.get(i).getData_doladowania());
          stpre.setInt(2,doladowaniakoniec.get(i).getId_bankomat());
	  stpre.executeUpdate();
  	
System.out.println("id: "+doladowaniakoniec.get(i).getId_bankomat());
System.out.println("data: "+doladowaniakoniec.get(i).getData_doladowania());
}
    	return doladowaniakoniec;
    }
    

    
    public ArrayList<AtmData> getChosenAtms(int[] atmIds){
        ArrayList<AtmData> atms = new ArrayList<AtmData>();
        try {
           
            for(int i=0;i<atmIds.length;i++) {
            	 Statement st = c.createStatement();
            	 ResultSet rs = st.executeQuery("SELECT `id_bankomat`, `szerokosc_geo` , `dlugosc_geo`  FROM `bankomaty` WHERE `id_bankomat` LIKE "+atmIds[i]);
            	
            	 while (rs.next()) {
            		 atms.add(new AtmData(rs.getInt("id_bankomat"), rs.getFloat("dlugosc_geo"), rs.getFloat("szerokosc_geo")));
                 }	
            	rs.close();
            }

            
        } catch (Exception e) {
        	e.printStackTrace();
            System.out.println("Błąd przy pobieraniu danych");
        }
        return atms;
    }

}